Some memory systems with non-volatile memories (such as flash memory) have an auto-sleep function. Typically, the controller of such a memory system is programmed with a predetermined time threshold, and if the memory has been idle for longer than the predetermined time threshold (e.g., due to inactivity of a host), the controller places the memory system in an auto-sleep mode to reduce the current and power consumed by the memory system. Before the memory system is put to sleep, the controller typically performs various tasks to prepare for sleep mode, such as saving user and management data from volatile memory to non-volatile memory and powering off hardware components. When the controller senses a new command from the host, the controller typically performs various tasks to exit from sleep mode, such as copying user and management data from non-volatile memory to volatile memory and powering on hardware components.